Welcome Guest, you are in: Login
CTS Futures

Page History: MarketData Incremental Refresh

Compare Page Revisions



« Older Revision - Back to Page History - Newer Revision »


Page Revision: 2013/12/23 16:18


Describing Market Data

The T4 FIX API supports streaming of market data with the Market Data Incremental Refresh message (Tag 35=X) alongside [MarketData Snapshot FullRefresh|MarketData Snapshots messages (Tag 35=W).

Market Data Incremental Refresh messages are responses to a Market Data Request message with a Subscription Request Type of Snapshot + Updates_Incremental (Tag 263=7). They carry step-by-step changes to the depth book without having to transmit the complete depth information (for all requested book levels) as the Market Data SnapShot message (Tag 35=W). Book instructions are incremental and update applicable parts of the book as necessary, as opposed to refreshing the entire book each time there is a depth update. Therefore, the incremental refresh approach reduces the message size required to notify a depth change.

The Market Data Incremental Refresh message can project changes in the Bid (Tag 269=0), Offer (Tag 269=1), Implied Bid (Tag 269=2) and Implied Offer (Tag 269=3) books. Market Data Incremental Refresh messages will only be generated for MDUpdateTypes (Tag 265) that provide depth book information (e.g. SlowSmart, Smart, SmartTrade, etc.). Trades are always provided as individual Market Data Snapshot messages (Tag 35=W) even under incremental refresh streaming.

Depth Book Refresh

A Market Data Request (Tag 35=V) message with a Subscription Request Type of Snapshot + Updates_Incremental (Tag 263=7) initiates the Depth Book incremental refresh process. The incremental refresh process starts with an initial (Depth) Market Data Snapshot message (Tag 35=W) establishing the instantaneous state of the depth book. Any subsequent Market Data Incremental Refresh messages are applied in sequence to the last Market Data Snapshot received.

The Market Data Incremental Refresh message only includes (instantaneous) transactions that change a specific (Price) MDEntryLevel (Tag 1023). Depending on the MDUpdateAction (Tag 279), the MDEntryPx (Tag 270) or MDEntrySize (Tag 271) may be changed, deleted or added at the identified MDEntryLevel (Tag 1023). Multiple MDUpdateActions (a.k.a. data blocks) can be sent in one Market Data Incremental Refresh message. Each data block is applied incrementally in the sequence of the MDEntries found in the NoMDEntries repeating group.

For applicable MDUpdateTypes (a.k.a. buffer levels), trades are disseminated as their own individual Market Data Snapshots (with no book). As trades occur, Trade Market Data Snapshots are streamed alongside the incremental book changes.

Update Action Logic

The logic behind using MDUpdateAction (Tag 279) of the Market Data Incremental Refresh message is as follows:

• Add (Tag 279=0) - Create/Insert a new price at a specified price level. An Add (a.k.a. New) data block is sent if there is a new price level. Client systems should then shift price levels down, and delete any price levels past the requested depth of the book (MarketDepth - Tag 264 of Market Data Request).

• Change (Tag 279=1) - Change quantity (i.e. size) for a price at a specified price level. The Change data block is sent to update data at the price level without changing the price itself, or impacting any other prices on the book. The change data block is sent only to update the quantity (i.e. size) for a price level. The Change data block is not sent when the price changes at a given price level.

• Delete (Tag 279=2) - Remove a price at a specified price level. A Delete data block is sent to remove a price level in the book. Client systems should shift prices below the data block up to the price level vacated by the deleted price level. If available, an add data block will be sent to fill in the last price level.

Matching against Market Data Requests

Market Data Incremental Refresh messages can be matched (by the FIX API client) through either the (unique) SecurityID (Tag 48) or by the Request ID (MDReqID - Tag 262) of the Market Data Request message that initiated the streaming. SecurityID is the default identification mechanism. If the message is identifiable by SecurityID, the first incremental data block will contain the market (SecurityID - Tag 48) to which the updates apply to. If the client requests to identify by MDReqID, the SecurityID will not be included in the first incremental data block. To establish market state, the Security Trading Status (Tag 369) is also provided in the first data block of the MDEntries.


Message Dictionary
TagField NameReq'dComments
Standard HeaderY
262MDReqIDNIdentifier of Market Data Request.
Start Repeating Group
268NoMDEntriesYNumber of Market Data entries to follow
279MDUpdateActionYMarket Data Update. Must be the first field in this repeating group. Valid values are:
0 = Add
1 = Change
2 = Delete
269MDEntryTypeYMarket Data Entry Type. Valid values are:
0 = Bid
1 = Offer
2 = Implied Bid
3 = Implied Offer
270MDEntryPxNEntry Price.
271MDEntrySizeNEntry Size (or Volume).
1023MDEntryLevelYBook (price) level this entry pertains to; an integer value from 1 to 10.
48SecurityIDNSecurity Identifier. T4 Market ID.
369Security Trading StatusNMarket Status of Security. Valid values are:
0 = Undefined
1 = PreOpen
2 = Open
3 = RestrictedOpen
4 = PreClosed
5 = Closed
6 = Suspended
7 = Halted
8 = Failed
9 = PreCross
10 = Cross
11 = Expired
12 = Rejected
13 = Unavailable
End Repeating Group
Standard TrailerY

Sample Messages

The different stages of a Market Data Incremental Refresh session are shown below. In the first message, the incremental refresh session is requested for both Bid (Tag 269=0) and Offer books (Tag 269=1) with a depth of 10 price levels (Tag 264=10) alongside trade Market Data snapshots (Tag 269=4). The first message received (with sequence number 4) is a Market Data Snapshot. This message fully establishes the depth details of all (available) price levels for the Bid and Offer books. As available, another snapshot follows carrying the settlement, limit and high/low prices for the session. Following are four incremental refresh messages indicating changes to different levels of the Bid and Offer books. These incremental changes would be applied (in sequence) to the latest state of the Bid and Offer books as shown in the initial Market Data Snapshot (of sequence number 4). At the end of the samples, three individual Trade Market Data Snapshots are received as these trades occurred in the market.

Requesting Incremental Refresh Session
1 - MARKETDATAREQUEST
34=2|49=T4Example|52=20131125-17:35:50.449|56=T4|146=1|55=ES|48=CME_20131200_ESZ3|207=CME_Eq|262=11-25-2013-11:35:50.4497000-mr|263=7|264=10|265=3|267=8|269=0|269=1|269=4|269=7|269=8|269=K|269=L|269=6|

[MsgSeqNum] 34 = 2
[SenderCompID] 49 = T4Example
[SendingTime] 52 = 20131125-17:35:50.449
[TargetCompID] 56 = T4
[NoRelatedSym] 146 = 1
[Symbol] 55 = ES
[SecurityID] 48 = CME_20131200_ESZ3
[SecurityExchange] 207 = CME_Eq
[MDReqID] 262 = 11-25-2013-11:35:50.4497000-mr
[SubscriptionRequestType] 263 = 7 (SNAPSHOT_PLUS_UPDATES_INCREMENTAL)
[MarketDepth] 264 = 10
[MDUpdateType] 265 = 3 (SMART_TRADE)
[NoMDEntryTypes] 267 = 8
[MDEntryType] 269 = 0 (BID)
[MDEntryType] 269 = 1 (OFFER)
[MDEntryType] 269 = 4 (TRADE)
[MDEntryType] 269 = 7 (TRADING_SESSION_HIGH_PRICE)
[MDEntryType] 269 = 8 (TRADING_SESSION_LOW_PRICE)
[MDEntryType] 269 = K (LIMIT_HIGH_PRICE)
[MDEntryType] 269 = L (LIMIT_LOW_PRICE)
[MDEntryType] 269 = 6 (SETTLEMENT_PRICE)

Initial State of Bid and Offer Books
2 - MARKETDATASNAPSHOT
34=4|49=T4|56=T4Example|52=20131125-17:35:57.272|48=CME_20131200_ESZ3|387=617967|965=2|268=21|269=0|270=180425|271=268|1023=1|269=0|270=180400|271=1049|1023=2|269=0|270=180375|271=1488|1023=3|269=0|270=180350|271=1596|1023=4|269=0|270=180325|271=1192|1023=5|269=0|270=180300|271=1240|1023=6|269=0|270=180275|271=1220|1023=7|269=0|270=180250|271=1413|1023=8|269=0|270=180225|271=1368|1023=9|269=0|270=180200|271=1759|1023=10|269=1|270=180450|271=768|1023=1|269=1|270=180475|271=1316|1023=2|269=1|270=180500|271=1713|1023=3|269=1|270=180525|271=1476|1023=4|269=1|270=180550|271=1760|1023=5|269=1|270=180575|271=1418|1023=6|269=1|270=180600|271=1783|1023=7|269=1|270=180625|271=1226|1023=8|269=1|270=180650|271=1484|1023=9|269=1|270=180675|271=1396|1023=10|269=4|270=180425|271=2|

[MsgSeqNum] 34 = 4
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:35:57.272
[SecurityID] 48 = CME_20131200_ESZ3
[TotalVolumeTraded] 387 = 617967
[SecurityStatus] 965 = 2 (OPEN)
[NoMDEntries] 268 = 21
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180425
[MDEntrySize] 271 = 268
[MDPriceLevel] 1023 = 1
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180400
[MDEntrySize] 271 = 1049
[MDPriceLevel] 1023 = 2
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180375
[MDEntrySize] 271 = 1488
[MDPriceLevel] 1023 = 3
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180350
[MDEntrySize] 271 = 1596
[MDPriceLevel] 1023 = 4
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180325
[MDEntrySize] 271 = 1192
[MDPriceLevel] 1023 = 5
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180300
[MDEntrySize] 271 = 1240
[MDPriceLevel] 1023 = 6
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180275
[MDEntrySize] 271 = 1220
[MDPriceLevel] 1023 = 7
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180250
[MDEntrySize] 271 = 1413
[MDPriceLevel] 1023 = 8
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180225
[MDEntrySize] 271 = 1368
[MDPriceLevel] 1023 = 9
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180200
[MDEntrySize] 271 = 1759
[MDPriceLevel] 1023 = 10
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180450
[MDEntrySize] 271 = 768
[MDPriceLevel] 1023 = 1
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180475
[MDEntrySize] 271 = 1316
[MDPriceLevel] 1023 = 2
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180500
[MDEntrySize] 271 = 1713
[MDPriceLevel] 1023 = 3
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180525
[MDEntrySize] 271 = 1476
[MDPriceLevel] 1023 = 4
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180550
[MDEntrySize] 271 = 1760
[MDPriceLevel] 1023 = 5
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180575
[MDEntrySize] 271 = 1418
[MDPriceLevel] 1023 = 6
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180600
[MDEntrySize] 271 = 1783
[MDPriceLevel] 1023 = 7
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180625
[MDEntrySize] 271 = 1226
[MDPriceLevel] 1023 = 8
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180650
[MDEntrySize] 271 = 1484
[MDPriceLevel] 1023 = 9
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180675
[MDEntrySize] 271 = 1396
[MDPriceLevel] 1023 = 10
[MDEntryType] 269 = 4 (TRADE)
[MDEntryPx] 270 = 180425
[MDEntrySize] 271 = 2

Snapshot of Settlement and Session limits
- Snapshot of Settlement and Session limits -
3 - MARKETDATASNAPSHOT
34=5|49=T4|56=T4Example|52=20131125-17:35:57.272|48=CME_20131200_ESZ3|965=2|268=4|269=6|270=180125|271=2775739|269=7|270=180925|269=8|270=180100|269=L|270=167650|

[MsgSeqNum] 34 = 5
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:35:57.272
[SecurityID] 48 = CME_20131200_ESZ3
[SecurityStatus] 965 = 2 (OPEN)
[NoMDEntries] 268 = 4
[MDEntryType] 269 = 6 (SETTLEMENT_PRICE)
[MDEntryPx] 270 = 180125
[MDEntrySize] 271 = 2775739
[MDEntryType] 269 = 7 (TRADING_SESSION_HIGH_PRICE)
[MDEntryPx] 270 = 180925
[MDEntryType] 269 = 8 (TRADING_SESSION_LOW_PRICE)
[MDEntryPx] 270 = 180100
[MDEntryType] 269 = L (LIMIT_LOW_PRICE)
[MDEntryPx] 270 = 167650

Snapshot of Settlement and Session limits
4 - MARKETDATAINCREMENTAL
34=6|49=T4|56=T4Example|52=20131125-17:35:57.944|268=4|279=1|269=0|1023=1|271=287|48=CME_20131200_ESZ3|326=2|279=1|269=0|1023=8|271=1407|279=1|269=1|1023=1|271=783|279=1|269=1|1023=5|271=1759|

[MsgSeqNum] 34 = 6
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:35:57.944
[NoMDEntries] 268 = 4
[MDUpdateAction] 279 = 1 (CHANGE)
[MDEntryType] 269 = 0 (BID)
[MDPriceLevel] 1023 = 1
[MDEntrySize] 271 = 287
[SecurityID] 48 = CME_20131200_ESZ3
[SecurityTradingStatus] 326 = 2 (OPEN)
[MDUpdateAction] 279 = 1 (CHANGE)
[MDEntryType] 269 = 0 (BID)
[MDPriceLevel] 1023 = 8
[MDEntrySize] 271 = 1407
[MDUpdateAction] 279 = 1 (CHANGE)
[MDEntryType] 269 = 1 (OFFER)
[MDPriceLevel] 1023 = 1
[MDEntrySize] 271 = 783
[MDUpdateAction] 279 = 1 (CHANGE)
[MDEntryType] 269 = 1 (OFFER)
[MDPriceLevel] 1023 = 5
[MDEntry

Incremental Refresh on Bid Level 1
5 - MARKETDATAINCREMENTAL
34=7|49=T4|56=T4Example|52=20131125-17:35:57.991|268=1|279=1|269=0|1023=1|271=294|48=CME_20131200_ESZ3|326=2|

[MsgSeqNum] 34 = 7
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:35:57.991
[NoMDEntries] 268 = 1
[MDUpdateAction] 279 = 1 (CHANGE)
[MDEntryType] 269 = 0 (BID)
[MDPriceLevel] 1023 = 1
[MDEntrySize] 271 = 294
[SecurityID] 48 = CME_20131200_ESZ3
[SecurityTradingStatus] 326 = 2 (OPEN)

Incremental Refresh on Offer Level 2
6 - MARKETDATAINCREMENTAL
34=8|49=T4|56=T4Example|52=20131125-17:35:58.303|268=1|279=1|269=1|1023=2|271=1319|48=CME_20131200_ESZ3|326=2|

[MsgSeqNum] 34 = 8
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:35:58.303
[NoMDEntries] 268 = 1
[MDUpdateAction] 279 = 1 (CHANGE)
[MDEntryType] 269 = 1 (OFFER)
[MDPriceLevel] 1023 = 2
[MDEntrySize] 271 = 1319
[SecurityID] 48 = CME_20131200_ESZ3
[SecurityTradingStatus] 326 = 2 (OPEN)

Incremental Refresh on Offer Level 2
7 - MARKETDATAINCREMENTAL
34=9|49=T4|56=T4Example|52=20131125-17:35:59.366|268=1|279=1|269=1|1023=2|271=1831|48=CME_20131200_ESZ3|326=2|

[MsgSeqNum] 34 = 9
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:35:59.366
[NoMDEntries] 268 = 1
[MDUpdateAction] 279 = 1 (CHANGE)
[MDEntryType] 269 = 1 (OFFER)
[MDPriceLevel] 1023 = 2
[MDEntrySize] 271 = 1831
[SecurityID] 48 = CME_20131200_ESZ3
[SecurityTradingStatus] 326 = 2 (OPEN)

Trade Snapshot. 8 contracts at 180425
8 - MARKETDATASNAPSHOT
34=10|49=T4|56=T4Example|52=20131125-17:36:00.163|48=CME_20131200_ESZ3|387=617975|268=1|269=4|270=180425|271=8|273=20131125-17:36:00.235|274=2|

[MsgSeqNum] 34 = 10
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:36:00.163
[SecurityID] 48 = CME_20131200_ESZ3
[TotalVolumeTraded] 387 = 617975
[NoMDEntries] 268 = 1
[MDEntryType] 269 = 4 (TRADE)
[MDEntryPx] 270 = 180425
[MDEntrySize] 271 = 8
[MDEntryTime] 273 = 20131125-17:36:00.235
[TickDirection] 274 = 2 (MINUS_TICK)

Trade Snapshot. 3 contracts at 180425
9 - MARKETDATASNAPSHOT
34=11|49=T4|56=T4Example|52=20131125-17:36:00.163|48=CME_20131200_ESZ3|387=617978|268=1|269=4|270=180425|271=3|273=20131125-17:36:00.235|274=2|

[MsgSeqNum] 34 = 11
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:36:00.163
[SecurityID] 48 = CME_20131200_ESZ3
[TotalVolumeTraded] 387 = 617978
[NoMDEntries] 268 = 1
[MDEntryType] 269 = 4 (TRADE)
[MDEntryPx] 270 = 180425
[MDEntrySize] 271 = 3
[MDEntryTime] 273 = 20131125-17:36:00.235
[TickDirection] 274 = 2 (MINUS_TICK)

Trade Snapshot. 1 contracts at 180425
10 - MARKETDATASNAPSHOT
34=12|49=T4|56=T4Example|52=20131125-17:36:00.163|48=CME_20131200_ESZ3|387=617979|268=1|269=4|270=180425|271=1|273=20131125-17:36:00.235|274=2|

[MsgSeqNum] 34 = 12
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:36:00.163
[SecurityID] 48 = CME_20131200_ESZ3
[TotalVolumeTraded] 387 = 617979
[NoMDEntries] 268 = 1
[MDEntryType] 269 = 4 (TRADE)
[MDEntryPx] 270 = 180425
[MDEntrySize] 271 = 1
[MDEntryTime] 273 = 20131125-17:36:00.235
[TickDirection] 274 = 2 (MINUS_TICK)

FIX API Home Page.

Trade how you want, where you want

support@ctsfutures.com (312) 939 0164

2 Pierce Pl, Suite 200, Itasca, IL 60143

© 2009-2023 Cunningham Trading Systems LLC All rights reserved.